﻿using System;
using System.ServiceModel;
using System.Collections.Generic;
using System.Security.Permissions;
using Bovespa.Infra.Services;
using Bovespa.Infra.Services.Transactions;
using Bovespa.Infra.Services.Security;
using Bovespa.Infra.Logging.Audit;
using Bovespa.Infra.ExceptionHandling;

namespace Bovespa.Sinacor.Servico.BaseConhecimento.Artigo.Servicos.Contratos
{
    /// <summary>
    /// Contrato de servico "IArtigo".
    /// </summary>
    [ExceptionShielding]
    [Authentication]
    [ServiceContract(Namespace = "http://www.bovespa.com.br/Artigo/ServiceContracts/2010/08", Name = "IArtigo", SessionMode = SessionMode.Allowed)]
    public interface IArtigo
    {
        /// <summary>
        /// Recupera uma lista de entidades de negocio "Artigo".
        /// </summary>
        [FaultContract(typeof(GeneralFault))]
        [FaultContract(typeof(BusinessFault))]
        [SuppressTransactions]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, Action = "ConsultarArtigo")]
        List<Bovespa.Sinacor.Servico.BaseConhecimento.Artigo.Servicos.Contratos.Artigo> ConsultarArtigo();

        /// <summary>
        /// Recupera uma entidade de negocio "Artigo".
        /// </summary>
        [FaultContract(typeof(GeneralFault))]
        [FaultContract(typeof(BusinessFault))]
        [SuppressTransactions]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, Action = "ObterArtigo")]
        Bovespa.Sinacor.Servico.BaseConhecimento.Artigo.Servicos.Contratos.Artigo ObterArtigo(int entrada);

        /// <summary>
        /// Persiste uma entidade de negocio "Artigo".
        /// </summary>
        [FaultContract(typeof(GeneralFault))]
        [FaultContract(typeof(BusinessFault))]
        [SuppressTransactions]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, Action = "InserirArtigo")]
        void InserirArtigo(Bovespa.Sinacor.Servico.BaseConhecimento.Artigo.Servicos.Contratos.Artigo entrada);

        /// <summary>
        /// Remove uma entidade de negocio "Artigo".
        /// </summary>
        [FaultContract(typeof(GeneralFault))]
        [FaultContract(typeof(BusinessFault))]
        [SuppressTransactions]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, Action = "ExcluirArtigo")]
        void ExcluirArtigo(int entrada);

        /// <summary>
        /// Atualiza uma entidade de negocio "Artigo".
        /// </summary>
        [FaultContract(typeof(GeneralFault))]
        [FaultContract(typeof(BusinessFault))]
        [SuppressTransactions]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, Action = "AtualizarArtigo")]
        void AtualizarArtigo(Bovespa.Sinacor.Servico.BaseConhecimento.Artigo.Servicos.Contratos.Artigo entrada);

        /// <summary>
        /// Persiste palavras chaves e as relaciona com os artigos.
        /// </summary>
        [FaultContract(typeof(GeneralFault))]
        [FaultContract(typeof(BusinessFault))]
        [SuppressTransactions]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, Action = "InserirPalavraChave")]
        void InserirPalavraChave(Bovespa.Sinacor.Servico.BaseConhecimento.Artigo.Servicos.Contratos.PalavraChave entrada);

        /// <summary>
        /// Recupera artigos que contém determinada palavra.
        /// </summary>
        [FaultContract(typeof(GeneralFault))]
        [FaultContract(typeof(BusinessFault))]
        [SuppressTransactions]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, Action = "RetornarListaArtigos")]
        Bovespa.Sinacor.Servico.BaseConhecimento.Artigo.Servicos.Contratos.ResultadoBuscaArtigo RetornarListaArtigos(string termo, int pagina, int qtdPagina);
    }
}
